<?php
/**
 * AdminusersDao.class.php
 * 
 * OpenPTA管理者画面
 * Admin_USERSのためのDao
 * 
 * 		author	；	m.majima
 * 		date	;	2009/10/20
 * 
 */
class AdminusersDao {
	/*
	* プロパティー 
	*/
	var $Id, 
		$Adminid, 
		$Password, 
		$Name,
		$Mbaddress,
		$Adddate,
		$TableName = 'adminusers';

    /* 
	 * デフォルトのコンストラクタ 
	 */
	function __construct() {
	}

	/* 
	 * Getter 
	 */
	function getId(){return $this->Id;}
	function getAdminid(){return $this->Adminid;}
	function getPassword(){return $this->Password;}
	function getName(){return $this->Name;}
	function getMbaddress(){return $this->Mbaddress;}
	function getAdddate(){return $this->Adddate;}
		
	/* 
	 * Setter 
	 */
	function setId($_str){$this->Id = intval($_str);}
	function setAdminid($_str){$this->Adminid = $_str;}
	function setPassword($_str){$this->Password = $_str;}
	function setName($_str){$this->Name = $_str;}
	function setMbaddress($_str){$this->Mbaddress = $_str;}
	function setAdddate($_str){$this->Adddate = $_str;}
		
	/*
	 * 全データの取得
	 * 
	 * 	戻り値；　
	 * 		配列: RDBのデータを当オブジェクトでラップした、Bean配列。
	 *
	 */
	function getAll($conn){
		require("../Myznala/debugLog.php");
		
		$sql = 'select * from '.$this->TableName.';';
	
		// fetch modeの設定
		$conn->setFetchMode(MDB2_FETCHMODE_ASSOC);
		
		$res = $conn->query($sql);
		if(MDB2::isError($res)){
			die($res->getMessage());
		}
		
		$i=0;
		$rArr=array();
		while($row = $res->fetchRow()){

			$obj = new EgpusersDao();
			$obj->setId($row["id"]);
			$obj->setEmail($row["adminid"]);
			$obj->setPassword($row["password"]);
			$obj->setName($row["japanesename"]);
			$obj->setMbadress($row["mbaddress"]);
			$obj->setAdddate($row["date"]);
			
			$rArr[$i]=$obj;
			$i++;
		}
		return $rArr;
	}
	
	/*
	 * Emailでソートされたデータの取得
	 * 
	 * 	戻り値；　
	 * 		配列: RDBのデータを当オブジェクトでラップした、Bean配列。
	 *
	 
	function getAllSortedByEmail($conn, $email){
		require("../Myznala/debugLog.php");
		
		$sql = 'select * from '.$this->TableName.' where email >= "'.$email.'" order by email;';
	
		// fetch modeの設定
		$conn->setFetchMode(MDB2_FETCHMODE_ASSOC);
		
		$res = $conn->query($sql);
		if(MDB2::isError($res)){
			die($res->getMessage());
		}
		
		$i=0;
		$rArr=array();
		while($row = $res->fetchRow()){

			$obj = new EgpusersDao();
			$obj->setId($row["id"]);
			$obj->setEmail($row["email"]);
			$obj->setPassword($row["password"]);
			$obj->setName($row["name"]);
			$obj->setNameYomi($row["name_yomi"]);
			$obj->setRole($row["role"]);
			
			$rArr[$i]=$obj;
			$i++;
		}
		return $rArr;
	}*/
	
	/*
	 * 新規Idの登録
	 * 
	 * 	戻り値；　
	 * 		id:		存在するidのmax値+1
	 *
	 */
	function getNewId($conn){
		require('../Myznala/debugLog.php');
		
		// sql statementの設定
		$sql = "select max(id) from ".$this->TableName.";";
		
		// fetch modeの設定
		$conn->setFetchMode(MDB2_FETCHMODE_ORDERED);

		$res = $conn->query($sql);
		if(MDB2::isError($res)){
			die($res->getMessage());
		}
		
		// 上にセットした、fetch modeでの読み込み
		$row = $res->fetchRow();
		
		return $row[0]+1;
	}

	/*
	 * Adminidが存在するか？
	 * 
	 * 	戻り値；　
	 * 		true	存在する場合
	 * 		false	存在しない場合
	 *
	 */
	function findAdminid($conn){
		require('../Myznala/debugLog.php');
		
		// sql statementの設定
		$sql = "select count(*) from ".$this->TableName." where adminid = ?";
		//echo($this->Adminid);
		
		// fetch modeの設定
		$conn->setFetchMode(MDB2_FETCHMODE_ORDERED);

		// prepared statementの引数の定義
		$arg_type=	array('text');

		// prepared statementの作成
		$stt = $conn->prepare($sql,$arg_type);

		//echo($this->Adminid);
		$res = $stt->execute(array($this->Adminid));

		if(MDB2::isError($res)){
			//echo($res->getDebugInfo().'<br>');
			die($res->getMessage());
		}
		// 上にセットした、fetch modeでの読み込み
		$row = $res->fetchRow();
		
		if($row[0] > 0){
			//echo('true');
			return true;
		}else{
			//echo('false');
			return false;
		};
	}
	
	/*
	 * loginチェック
	 * 
	 * 	戻り値；　
	 * 		true	存在する場合
	 * 		false	存在しない場合
	 *
	 */
	function findLogin($conn){
		require('../Myznala/debugLog.php');

		// sql statementの設定
		$sql = "select count(*) from ".$this->TableName." where adminid = ? and password = ?";
		//echo($sql);
		
		// fetch modeの設定
		$conn->setFetchMode(MDB2_FETCHMODE_ORDERED);
		
		// prepared statementの引数の定義
		$arg_type=	array('text', 'text');

		// prepared statementの引数のセット
		$sel_array=array(
			$this->Adminid,
			$this->Password
		);

		// prepared statementの作成
		$stt = $conn->prepare($sql,$arg_type);
		$res = $stt->execute($sel_array);
		
		if(MDB2::isError($res)){
			//echo($res->getDebugInfo().'<br>');
			die($res->getMessage());
		}
		// 上にセットした、fetch modeでの読み込み
		$row = $res->fetchRow();
		if($row[0] > 0){
			//echo('true');
			return true;
		}else{
			//echo('false');
			return false;
		};
	}
	
	/*
	 * レコードの登録
	 * 
	 * 	戻り値；　
	 * 		true	成功
	 * 		失敗の場合は、死ぬ。
	 *
	 */
	function insertAdminusers($conn){
		require('../Myznala/debugLog.php');
	
		// prepared statement
		$sql = "insert into adminusers values(?,?,?,?,?,datetime('now','localtime'));";
		
		// prepared statementの引数
		$arg_type=array(
					'integer', // ID
					'text', // adminid
					'text', // Password
					'text', // japaneaseName
					'text'  // mbaddress
				);

		// prepared statementの作成
		$stt = $conn->prepare($sql, $arg_type, MDB2_PREPARE_MANIP);
		// prepared statementの引数のセット

		$iArr=array(
				$this->Id,
				$this->Adminid,
				$this->Password,
				$this->Name,
				$this->Mbaddress
			);
		
		// prepared statementの実行
		$res = $stt->execute($iArr);
		if(MDB2::isError($res)){
			die($res->getMessage());
		}

		return true;
	
	}

	/*
	 * レコードの更新
	 * 
	 * 	戻り値；　
	 * 		true	成功
	 * 		失敗の場合は、死ぬ。
	 *
	 */
	function update($conn){
		require('../Myznala/debugLog.php');
	
		// prepared statement
		$sql = "update EGP_USERS set 
				password=?, name=?, name_yomi=?, role=? where id=?;";
		
		// prepared statementの引数
		$arg_type=array(
			'text',
			'text',
			'text',
			'text',
			'integer');
		
		// prepared statementの作成
		$stt = $conn->prepare($sql,$arg_type,MDB2_PREPARE_MANIP);

		// prepared statementの引数のセット
		$update_array=array(
			$this->Password,
			$this->Name,
			$this->NameYomi,
			$this->Role,
			$this->Id
		);
			
		// prepared statementの実行
		$result = $stt->execute($update_array);
		if(MDB2::isError($conn)){
			die($result->$conn->getMessage());
		}
		
		return true;
	}

	/*
	 * レコードの削除
	 * 
	 * 	戻り値；　
	 * 		true	成功
	 * 		失敗の場合は、死ぬ。
	 */
	function delete($conn){
		require('../Myznala/debugLog.php');
	
		$sql = "delete from EGP_USERS where id=?;";
		
		// prepared statementの引数
		$arg_type=array(
			'integer'
		);
		
		// prepared statementの作成
		$stt = $conn->prepare($sql, $arg_type, MDB2_PREPARE_MANIP);
		// prepared statementの引数のセット
		$delete_array=array(
			$this->Id
		);
			
		// prepared statementの実行
		$res = $stt->execute($delete_array);
		if(MDB2::isError($conn)){
			die($res->getMessage());
		}
		
		return true;
	}
	
	/*
	 * Idでデータを取得する
	 * 
	 * 	戻り値；　
	 * 		成功の場合は、EgpusersDaoのオブジェクト
	 * 		失敗の場合は、null。
	 */
	function findId($conn,$id){

		// fetch modeの設定
		$conn->setFetchMode(MDB2_FETCHMODE_ASSOC);
		
		// prepared statementの設定
		$sql = "select * from EGP_USERS where id=?;";
		// prepared statementの引数
		$arg_type=array('integer');
		// prepared statementの作成
		$stt = $conn->prepare($sql,$arg_type);
		
		// prepared statementの実行
		$result = $stt->execute(array($id));
		if(MDB2::isError($result)){
			die($result->getMessage());
		}
		
		// 上に定義した、fetch modeでの読み込み。
		$row = $result->fetchRow();

		$obj = new EgpusersDao();
		$obj->setId($row["id"]);
		$obj->setEmail($row["email"]);
		$obj->setPassword($row["password"]);
		$obj->setName($row["name"]);
		$obj->setNameYomi($row["name_yomi"]);
		$obj->setRole($row["role"]);

		return $obj;
	}
	
	/*
	 * Idでデータを取得する
	 * 
	 * 	戻り値；　
	 * 		成功の場合は、EgpusersDaoのオブジェクト
	 * 		失敗の場合は、null。
	 */
	function findById($conn,$id){

		// fetch modeの設定
		$conn->setFetchMode(MDB2_FETCHMODE_ASSOC);
		
		// prepared statementの設定
		$sql = "select * from EGP_USERS where id=?;";
		// prepared statementの引数
		$arg_type=array('integer');
		// prepared statementの作成
		$stt = $conn->prepare($sql,$arg_type);
		
		// prepared statementの実行
		$result = $stt->execute(array($id));
		if(MDB2::isError($result)){
			die($result->getMessage());
		}
		
		// 上に定義した、fetch modeでの読み込み。
		$row = $result->fetchRow();

		return $row;
	}
	
	/*
	 * Emailでデータを取得する
	 * 
	 * 	戻り値；　
	 * 		成功の場合は、EgpusersDaoのオブジェクト
	 * 		失敗の場合は、null。
	 */
	function findByEmail($conn){
		require('../Myznala/debugLog.php');
	
		// fetch modeの設定
		$conn->setFetchMode(MDB2_FETCHMODE_ASSOC);
		
		// prepared statementの設定
		$sql = "select * from ".$this->TableName." where email=?;";
		// prepared statementの引数
		$arg_type=array('text');
		// prepared statementの作成
		$stt = $conn->prepare($sql,$arg_type);

//		$myDebugLog->debug('$sql '.$sql);
//		$myDebugLog->debug('$this->Email '.$this->Email);
		
		// prepared statementの実行
		$result = $stt->execute(
			array($this->Email)
		);
		if(MDB2::isError($result)){
			die($result->getMessage());
		}
		
		// 上に定義した、fetch modeでの読み込み。
		$row = $result->fetchRow();
		
		return $row;
	}
	
	/*
	 * Idの存在チェック
	 * 
	 * 	戻り値；　
	 * 		countの値
	 */
	function findUserId($conn,$id){
		require('../Myznala/debugLog.php');
		
		// prepared statementの設定
		$sql = "select count(*) from EGP_USERS where id=?;";
		
		// fetch modeの設定
		$conn->setFetchMode(MDB2_FETCHMODE_ORDERED);
		// prepared statementの引数の定義
		$arg_type=array('integer');
		// prepared statementの作成
		$stt = $conn->prepare($sql,$arg_type);
		
		// prepared statementの実行
		$result = $stt->execute(array($id));
		if(MDB2::isError($result)){
			die($result->getMessage());
		}
		// 上にセットした、fetch modeでの読み込み
		$row = $result->fetchRow();
		
		return $row[0];
	}
	
}
?>